package fr.enseirb.mycub.structures;

import java.util.ArrayList;
public class Horaire {

	public int jour = -1;
	public int mois = -1;
	public int heure = -1;
	public int minute = -1;
	public int seconde = -1;
	public boolean summoned = false;
	public Station station;

	public Horaire(int heure, int minutes, int secondes){
		this.heure = heure;
		this.minute = minutes;
		this.seconde = secondes;
	}

	public Horaire(int heure, int minutes, int secondes, int jour, int mois, Station s){
		this.heure = heure;
		this.minute = minutes;
		this.seconde = secondes;
		this.jour = jour;
		this.mois = mois;
		this.station = s;

	}

	public String toString(){
		if(minute == -1)
			return null;
		String time = "";
		if(heure >= 0) time += heure+"h ";
		if(minute >= 0) time += minute+"min ";
		if(seconde >= 0) time += seconde+"s ";
		if(jour >= 0) time += "("+jour+"/";
		if(mois >= 0) time += (mois+1)+")";
		return time;
	}

	public static ArrayList<Horaire> getHoraire(Station station){
		ArrayList<Horaire> liste = new ArrayList<Horaire>();
		//TODO faire la vraie fonction
		switch(station.getId()){
		case 0:
			break;
		case 1:
			for(int i = -2; i < 10; i++){
				liste.add(addSeconds(new Horaire(GroupeHoraire.heure, GroupeHoraire.minute, GroupeHoraire.seconde, GroupeHoraire.jour, GroupeHoraire.mois,station),i*180));
			}
			break;
		case 2:
			for(int i = -2; i < 10; i++){
				liste.add(addSeconds(new Horaire(GroupeHoraire.heure, GroupeHoraire.minute, GroupeHoraire.seconde, GroupeHoraire.jour, GroupeHoraire.mois,station),i*180+38+10));
			}
			break;
		case 3:
			for(int i = -2; i < 10; i++){
				liste.add(addSeconds(new Horaire(GroupeHoraire.heure, GroupeHoraire.minute, GroupeHoraire.seconde, GroupeHoraire.jour, GroupeHoraire.mois,station),i*180+66+20));
			}
			break;
		case 4:
			for(int i = -2; i < 10; i++){
				liste.add(addSeconds(new Horaire(GroupeHoraire.heure, GroupeHoraire.minute, GroupeHoraire.seconde, GroupeHoraire.jour, GroupeHoraire.mois,station),i*180+103+30));
			}
			break;
		case 5:
			for(int i = -2; i < 10; i++){
				liste.add(addSeconds(new Horaire(GroupeHoraire.heure, GroupeHoraire.minute, GroupeHoraire.seconde, GroupeHoraire.jour, GroupeHoraire.mois,station),i*180+148+40));
			}
			break;
		case 6:
			for(int i = -2; i < 10; i++){
				liste.add(addSeconds(new Horaire(GroupeHoraire.heure, GroupeHoraire.minute, GroupeHoraire.seconde, GroupeHoraire.jour, GroupeHoraire.mois,station),i*180+206+50));
			}
			break;
		default:
			break;
		}

		return liste;
	}

	public static Horaire addSeconds(Horaire h, int sec){
		//TODO fais � l'arrache... gestion des mois... c'est pour les tests
		h.seconde += sec;
		if(h.seconde > 59){
			h.minute += (h.seconde)/60;
			h.seconde = (h.seconde)%60;
			if(h.minute > 59){
				h.heure += (h.minute)/60;
				h.minute = (h.minute)%60;
				if(h.heure> 23){
					h.jour += (h.heure)/60;
					h.heure = (h.heure)%23;
				}
			}
		}
		return h;
	}

	public static boolean comingAfter(Horaire h1, Horaire h2){
		if(h1.mois > h2.mois) return true;
		else if(h1.mois == h2.mois){
			if(h1.jour > h2.jour) return true;
			else if(h1.jour == h2.jour){
				if(h1.heure > h2.heure) return true;
				else if(h1.heure == h2.heure){
					if(h1.minute > h2.minute) return true;
					else if(h1.minute == h2.minute){
						if(h1.seconde > h2.seconde) return true;
					}
				}
			}
		}
		return false;
	}

	public static boolean comingAfterCurrentTime(Horaire h1){
		if(h1 == null) return false;
		if(h1.mois > GroupeHoraire.mois) return true;
		else if(h1.mois == GroupeHoraire.mois){
			if(h1.jour > GroupeHoraire.jour) return true;
			else if(h1.jour == GroupeHoraire.jour){
				if(h1.heure > GroupeHoraire.heure) return true;
				else if(h1.heure == GroupeHoraire.heure){
					if(h1.minute > GroupeHoraire.minute) return true;
					else if(h1.minute == GroupeHoraire.minute){
						if(h1.seconde > GroupeHoraire.seconde) return true;
					}
				}
			}
		}
		return false;
	}


}
